package logic.entities;

import java.awt.Rectangle;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

import logic.pruebas.GamePanel;

/**
 * @author Unai
 * Clase abstracta para todos los objetos que se visulizan en pantalla
 *
 */
public abstract class GameObject extends JLabel{
	private static final long serialVersionUID = 5779011264247206538L;
	public float collisionX;
	public float collisionY;
	public int collisionWidth;
	public int collisionHeight;
	protected String nombreImagen; //nombre del fichero de imagen del objeto
	public float coorX; //Coordenadas X
	public float coorY; //Coordenadas Y
	public GamePanel panelJuego;  //Panel en el que se desarrolla el juego
	public boolean dibujado = false;  //true si esta dibujado, false en caso contrario
	public boolean relevant;
	public int anchura; //anchura del objeto
	public int altura; //altura del objeto
	protected ImageIcon icono;	//icono del objeto
	protected long ultimoDibujo; //hora de la ultima vez que se dibujo el objeto
	public boolean dead;

	/**
	 * @param x
	 * @param y
	 * @param panel
	 * @param nomImg
	 */
	public GameObject( float x, float y, GamePanel panel, String nomImg ) {
		coorX = x;
		coorY = y;
		panelJuego = panel;
		this.nombreImagen = nomImg;
		URL imgURL = getClass().getClassLoader().getResource(nomImg);
		icono = new ImageIcon(imgURL);
		setIcon( icono );
		anchura = icono.getIconWidth();
		altura = icono.getIconHeight();
		setBounds( new Rectangle( anchura, altura ));
		dibujado = false;
		collisionX = coorX;
		collisionY = coorY;
		collisionWidth = anchura;
		collisionHeight = altura;
	}

	/**
	 * Dibuja el objeto en pantalla
	 */
	public void dibujar() {
		if (!dibujado) { 
			panelJuego.add( this, 0 );
			this.dibujado = true;
		}
		setLocation( (int)coorX, (int)coorY );
		ultimoDibujo = System.currentTimeMillis();
	}


	/**
	 * @return
	 * Evalua si se ha salido de pantalla en el eje X
	 */
	public boolean seSaleX() {
		return (coorX + anchura < 0 || coorX > 800);
	}

	/**
	 * @return
	 * Evalua si se ha salido de pantalla en el eje Y
	 */
	public boolean seSaleY() {
		return (coorY + altura < 0 || coorY > 600);
	}
}

